/*
 * DRACOON API
 * REST Web Services for DRACOON<br><br>This page provides an overview of all available and documented DRACOON APIs, which are grouped by tags.<br>Each tag provides a collection of APIs that are intended for a specific area of the DRACOON.<br><br><a title='Developer Information' href='https://developer.dracoon.com'>Developer Information</a>&emsp;&emsp;<a title='Get SDKs on GitHub' href='https://github.com/dracoon'>Get SDKs on GitHub</a><br><br><a title='Terms of service' href='https://www.dracoon.com/terms/general-terms-and-conditions/'>Terms of service</a>
 *
 * OpenAPI spec version: 4.45.1
 * 
 *
 * NOTE: This class is auto generated by the swagger code generator program.
 * https://github.com/swagger-api/swagger-codegen.git
 * Do not edit the class manually.
 */

package ch.cyberduck.core.sds.io.swagger.client.model;

import java.util.Objects;
import java.util.Arrays;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonValue;
import io.swagger.v3.oas.annotations.media.Schema;
/**
 * Customer information
 */
@Schema(description = "Customer information")

public class CustomerData {
  @JsonProperty("id")
  private Long id = null;

  @JsonProperty("name")
  private String name = null;

  @JsonProperty("isProviderCustomer")
  private Boolean isProviderCustomer = null;

  @JsonProperty("spaceLimit")
  private Long spaceLimit = null;

  @JsonProperty("spaceUsed")
  private Long spaceUsed = null;

  @JsonProperty("accountsLimit")
  private Integer accountsLimit = null;

  @JsonProperty("accountsUsed")
  private Integer accountsUsed = null;

  @JsonProperty("cntInternalUser")
  private Integer cntInternalUser = null;

  @JsonProperty("cntGuestUser")
  private Integer cntGuestUser = null;

  @JsonProperty("customerEncryptionEnabled")
  private Boolean customerEncryptionEnabled = null;

  public CustomerData id(Long id) {
    this.id = id;
    return this;
  }

   /**
   * Unique identifier for the customer
   * @return id
  **/
  @Schema(required = true, description = "Unique identifier for the customer")
  public Long getId() {
    return id;
  }

  public void setId(Long id) {
    this.id = id;
  }

  public CustomerData name(String name) {
    this.name = name;
    return this;
  }

   /**
   * Customer name
   * @return name
  **/
  @Schema(required = true, description = "Customer name")
  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public CustomerData isProviderCustomer(Boolean isProviderCustomer) {
    this.isProviderCustomer = isProviderCustomer;
    return this;
  }

   /**
   * Customer is Provider Customer
   * @return isProviderCustomer
  **/
  @Schema(required = true, description = "Customer is Provider Customer")
  public Boolean isIsProviderCustomer() {
    return isProviderCustomer;
  }

  public void setIsProviderCustomer(Boolean isProviderCustomer) {
    this.isProviderCustomer = isProviderCustomer;
  }

  public CustomerData spaceLimit(Long spaceLimit) {
    this.spaceLimit = spaceLimit;
    return this;
  }

   /**
   * Space limit (in bytes). -1 for unlimited
   * @return spaceLimit
  **/
  @Schema(required = true, description = "Space limit (in bytes). -1 for unlimited")
  public Long getSpaceLimit() {
    return spaceLimit;
  }

  public void setSpaceLimit(Long spaceLimit) {
    this.spaceLimit = spaceLimit;
  }

  public CustomerData spaceUsed(Long spaceUsed) {
    this.spaceUsed = spaceUsed;
    return this;
  }

   /**
   * Space used (in bytes)
   * @return spaceUsed
  **/
  @Schema(required = true, description = "Space used (in bytes)")
  public Long getSpaceUsed() {
    return spaceUsed;
  }

  public void setSpaceUsed(Long spaceUsed) {
    this.spaceUsed = spaceUsed;
  }

  public CustomerData accountsLimit(Integer accountsLimit) {
    this.accountsLimit = accountsLimit;
    return this;
  }

   /**
   * User accounts limit
   * @return accountsLimit
  **/
  @Schema(required = true, description = "User accounts limit")
  public Integer getAccountsLimit() {
    return accountsLimit;
  }

  public void setAccountsLimit(Integer accountsLimit) {
    this.accountsLimit = accountsLimit;
  }

  public CustomerData accountsUsed(Integer accountsUsed) {
    this.accountsUsed = accountsUsed;
    return this;
  }

   /**
   * User accounts used
   * @return accountsUsed
  **/
  @Schema(required = true, description = "User accounts used")
  public Integer getAccountsUsed() {
    return accountsUsed;
  }

  public void setAccountsUsed(Integer accountsUsed) {
    this.accountsUsed = accountsUsed;
  }

  public CustomerData cntInternalUser(Integer cntInternalUser) {
    this.cntInternalUser = cntInternalUser;
    return this;
  }

   /**
   * Number of internal user accounts
   * @return cntInternalUser
  **/
  @Schema(required = true, description = "Number of internal user accounts")
  public Integer getCntInternalUser() {
    return cntInternalUser;
  }

  public void setCntInternalUser(Integer cntInternalUser) {
    this.cntInternalUser = cntInternalUser;
  }

  public CustomerData cntGuestUser(Integer cntGuestUser) {
    this.cntGuestUser = cntGuestUser;
    return this;
  }

   /**
   * Number of guest user accounts
   * @return cntGuestUser
  **/
  @Schema(required = true, description = "Number of guest user accounts")
  public Integer getCntGuestUser() {
    return cntGuestUser;
  }

  public void setCntGuestUser(Integer cntGuestUser) {
    this.cntGuestUser = cntGuestUser;
  }

  public CustomerData customerEncryptionEnabled(Boolean customerEncryptionEnabled) {
    this.customerEncryptionEnabled = customerEncryptionEnabled;
    return this;
  }

   /**
   * Clientside encryption for customer enabled
   * @return customerEncryptionEnabled
  **/
  @Schema(required = true, description = "Clientside encryption for customer enabled")
  public Boolean isCustomerEncryptionEnabled() {
    return customerEncryptionEnabled;
  }

  public void setCustomerEncryptionEnabled(Boolean customerEncryptionEnabled) {
    this.customerEncryptionEnabled = customerEncryptionEnabled;
  }


  @Override
  public boolean equals(java.lang.Object o) {
    if (this == o) {
      return true;
    }
    if (o == null || getClass() != o.getClass()) {
      return false;
    }
    CustomerData customerData = (CustomerData) o;
    return Objects.equals(this.id, customerData.id) &&
        Objects.equals(this.name, customerData.name) &&
        Objects.equals(this.isProviderCustomer, customerData.isProviderCustomer) &&
        Objects.equals(this.spaceLimit, customerData.spaceLimit) &&
        Objects.equals(this.spaceUsed, customerData.spaceUsed) &&
        Objects.equals(this.accountsLimit, customerData.accountsLimit) &&
        Objects.equals(this.accountsUsed, customerData.accountsUsed) &&
        Objects.equals(this.cntInternalUser, customerData.cntInternalUser) &&
        Objects.equals(this.cntGuestUser, customerData.cntGuestUser) &&
        Objects.equals(this.customerEncryptionEnabled, customerData.customerEncryptionEnabled);
  }

  @Override
  public int hashCode() {
    return Objects.hash(id, name, isProviderCustomer, spaceLimit, spaceUsed, accountsLimit, accountsUsed, cntInternalUser, cntGuestUser, customerEncryptionEnabled);
  }


  @Override
  public String toString() {
    StringBuilder sb = new StringBuilder();
    sb.append("class CustomerData {\n");
    
    sb.append("    id: ").append(toIndentedString(id)).append("\n");
    sb.append("    name: ").append(toIndentedString(name)).append("\n");
    sb.append("    isProviderCustomer: ").append(toIndentedString(isProviderCustomer)).append("\n");
    sb.append("    spaceLimit: ").append(toIndentedString(spaceLimit)).append("\n");
    sb.append("    spaceUsed: ").append(toIndentedString(spaceUsed)).append("\n");
    sb.append("    accountsLimit: ").append(toIndentedString(accountsLimit)).append("\n");
    sb.append("    accountsUsed: ").append(toIndentedString(accountsUsed)).append("\n");
    sb.append("    cntInternalUser: ").append(toIndentedString(cntInternalUser)).append("\n");
    sb.append("    cntGuestUser: ").append(toIndentedString(cntGuestUser)).append("\n");
    sb.append("    customerEncryptionEnabled: ").append(toIndentedString(customerEncryptionEnabled)).append("\n");
    sb.append("}");
    return sb.toString();
  }

  /**
   * Convert the given object to string with each line indented by 4 spaces
   * (except the first line).
   */
  private String toIndentedString(java.lang.Object o) {
    if (o == null) {
      return "null";
    }
    return o.toString().replace("\n", "\n    ");
  }

}
